#include "CalculateDialog.h"

//构造函数 
CalculatorDialog::CalculatorDialog (void) 
{
	//界面的初始化
	setWindowTitle ("加法计算器");
	//创建左操作数, this表示父窗口指针
	m_editX = new QLineEdit (this);
	m_editX->setAlignment (Qt::AlignRight);
	//设置验证器, 只允许输入数字
	m_editX->setValidator (new QDoubleValidator(this));

	//创建右操作数, this表示父窗口指针
	m_editY = new QLineEdit (this);
	m_editY->setAlignment (Qt::AlignRight);
	//设置验证器, 只允许输入数字
	m_editY->setValidator (new QDoubleValidator(this));

	//创建显示结果
	m_editZ = new QLineEdit (this);
	m_editZ->setAlignment (Qt::AlignRight);
	m_editZ->setReadOnly (true); //设置显示结果为只读的

	//显示+
	m_label = new QLabel ("+", this);
	//创建"="
	m_btnCalc = new QPushButton ("=", this);
	m_btnCalc->setEnabled (false); //设置禁用

	//创建一个布局器, 用于创建组件的大小和位置
	QHBoxLayout *layout = new QHBoxLayout(this);

	//将每个组件按从左到右的顺序添加到布局器
	layout->addWidget(m_editX);
	layout->addWidget(m_label);
	layout->addWidget(m_editY);
	layout->addWidget(m_btnCalc);
	layout->addWidget(m_editZ);
	//设置布局器
	setLayout (layout);

	//信号和槽的连接
	//左右操作数文本改变的时候发送信号 textChanged() 
	//如果要连接的信号是定义在父窗口中，那么connect的第三个参数一定是this
	connect (m_editX, SIGNAL(textChanged(QString)), 
			this, SLOT(enableCalcButton ()));
	connect (m_editY, SIGNAL(textChanged(QString)), 
			this, SLOT(enableCalcButton ()));

	//点击等号按钮, 发送clICKED信号
	connect (m_btnCalc, SIGNAL(clicked()), 
			this, SLOT(calcClicked()));
}
//使能"=" 按钮
void CalculatorDialog::enableCalcButton(void)
{
	bool bXOK; //标记左操作数是否输入了有效data
	bool bYOK; 

	m_editX->text().toDouble(&bXOK);
	m_editY->text().toDouble(&bYOK);
	//检查左右操作数是否都输入了有效数据
	m_btnCalc->setEnabled (bXOK && bYOK);
	return;
}
//计算和显示结果 
void CalculatorDialog::calcClicked (void)  
{
	double res = m_editX->text().toDouble() + m_editY->text().toDouble();
	QString str = QString::number(res);
	m_editZ->setText (str);
}
